// RAP [rh] SplashHandler disabled
///*******************************************************************************
// * Copyright (c) 2007 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// ******************************************************************************/
//
//package org.eclipse.ui.internal.splash;
//
//import java.util.HashMap;
//import java.util.Map;
//
//import org.eclipse.core.runtime.IConfigurationElement;
//import org.eclipse.core.runtime.IExtension;
//import org.eclipse.core.runtime.IExtensionPoint;
//import org.eclipse.core.runtime.IProduct;
//import org.eclipse.core.runtime.Platform;
//import org.eclipse.core.runtime.SafeRunner;
//import org.eclipse.jface.util.SafeRunnable;
//import org.eclipse.ui.PlatformUI;
//import org.eclipse.ui.internal.WorkbenchPlugin;
//import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
//import org.eclipse.ui.splash.AbstractSplashHandler;
//
///**
// * Simple non-caching access to the splashHandler extension point.
// * 
// * @since 3.3
// */
//public final class SplashHandlerFactory {
//
//	/**
//	 * Find the splash handler for the given product or <code>null</code> if
//	 * it cannot be found.
//	 * 
//	 * @param product
//	 *            the product
//	 * @return the splash or <code>null</code>
//	 */
//	public static AbstractSplashHandler findSplashHandlerFor(IProduct product) {
//		if (product == null)
//			return null;
//
//		IExtensionPoint point = Platform.getExtensionRegistry()
//				.getExtensionPoint(PlatformUI.PLUGIN_ID,
//						IWorkbenchRegistryConstants.PL_SPLASH_HANDLERS);
//
//		if (point == null)
//			return null;
//
//		IExtension[] extensions = point.getExtensions();
//		Map idToSplash = new HashMap(); // String->ConfigurationElement
//		String[] targetId = new String[1];
//		for (int i = 0; i < extensions.length; i++) {
//			IConfigurationElement[] children = extensions[i]
//					.getConfigurationElements();
//			for (int j = 0; j < children.length; j++) {
//				AbstractSplashHandler handler = processElement(children[j],
//						idToSplash, targetId, product);
//				if (handler != null)
//					return handler;
//
//			}
//		}
//		return null;
//	}
//
//	/**
//	 * Process a given element.
//	 * 
//	 * @param configurationElement
//	 *            the element to process
//	 * @param idToSplash
//	 *            the map of current splash elements
//	 * @param targetId
//	 *            the target id if known
//	 * @param product
//	 *            the product to search for
//	 * @return a splash matching the target id from this element or
//	 *         <code>null</code>
//	 */
//	private static AbstractSplashHandler processElement(
//			IConfigurationElement configurationElement, Map idToSplash,
//			String[] targetId, IProduct product) {
//		String type = configurationElement.getName();
//		if (IWorkbenchRegistryConstants.TAG_SPLASH_HANDLER.equals(type)) {
//			String id = configurationElement
//					.getAttribute(IWorkbenchRegistryConstants.ATT_ID);
//			if (id == null)
//				return null;
//
//			// we know the target and this element is it
//			if (targetId[0] != null && id.equals(targetId[0])) {
//				return create(configurationElement);
//			}
//			// store for later examination
//			idToSplash.put(id, configurationElement);
//
//		} else if (IWorkbenchRegistryConstants.TAG_SPLASH_HANDLER_PRODUCT_BINDING
//				.equals(type)) {
//			String productId = configurationElement
//					.getAttribute(IWorkbenchRegistryConstants.ATT_PRODUCTID);
//			if (product.getId().equals(productId) && targetId[0] == null) { // we
//				// found the target ID
//				targetId[0] = configurationElement
//						.getAttribute(IWorkbenchRegistryConstants.ATT_SPLASH_ID);
//				// check all currently located splashes
//				IConfigurationElement splashElement = (IConfigurationElement) idToSplash
//						.get(targetId[0]);
//				if (splashElement != null)
//					return create(splashElement);
//			}
//		}
//
//		return null;
//	}
//
//	/**
//	 * Create the splash implementation.
//	 * 
//	 * @param splashElement
//	 *            the element to create from
//	 * @return the element or <code>null</code> if it couldn't be created
//	 */
//	private static AbstractSplashHandler create(
//			final IConfigurationElement splashElement) {
//		final AbstractSplashHandler[] handler = new AbstractSplashHandler[1];
//		SafeRunner.run(new SafeRunnable() {
//
//			/*
//			 * (non-Javadoc)
//			 * 
//			 * @see org.eclipse.core.runtime.ISafeRunnable#run()
//			 */
//			public void run() throws Exception {
//				handler[0] = (AbstractSplashHandler) WorkbenchPlugin
//						.createExtension(splashElement,
//								IWorkbenchRegistryConstants.ATT_CLASS);
//			}
//
//			/*
//			 * (non-Javadoc)
//			 * 
//			 * @see org.eclipse.jface.util.SafeRunnable#handleException(java.lang.Throwable)
//			 */
//			public void handleException(Throwable e) {
//				WorkbenchPlugin
//						.log("Problem creating splash implementation", e); //$NON-NLS-1$
//			}
//		});
//
//		return handler[0];
//	}
//}
